const VITE_DD_APP_KEY = import.meta.env.VITE_DD_APP_KEY
const VITE_DOMAIN = import.meta.env.VITE_DOMAIN

import api from '@h5app/sheep/api'
import { DD_CORP_ID } from '@h5app/sheep/interface/constants'
import * as dd from 'dingtalk-jsapi' // 此方式为整体加载，也可按需进行加载
import { useLocation } from './use-location'
interface IDTFParams {
  /** element id */
  id?: string
  /** 回调地址 */
  redirect_uri?: string
}

let isReady = false

/** 钉钉相关 */
export function useDingding() {
  /** 扫码登录（IFRAME） */
  const DTFrameLogin = (params?: IDTFParams) => {
    // redirect_uri = 'pagesAuth/login/login'
    const { id = 'dd-login-QRCode' } = params || {}
    const _redirect_uri = `${VITE_DOMAIN}`
    return new Promise<string>((resolve, reject) => {
      window.DTFrameLogin(
        {
          id,
          width: uni.upx2px(480),
          height: uni.upx2px(480),
        },
        {
          redirect_uri: encodeURIComponent(_redirect_uri),
          client_id: VITE_DD_APP_KEY,
          scope: 'openid',
          // scope: 'snsapi_login',
          response_type: 'code',
          // prompt: 'consent',
        },
        (loginResult: any) => {
          // , redirectUrl
          const { authCode } = loginResult
          // 这里可以直接进行重定向
          // window.location.href = redirectUrl;
          // 也可以在不跳转页面的情况下，使用code进行授权

          resolve(authCode)
        },
        (errorMsg: string) => {
          // 这里一般需要展示登录失败的具体原因
          console.log(`Login Error: ${errorMsg}`)
          reject(errorMsg)
        },
      )
    })
  }

  /** 钉钉免登 */
  const ddLogin = async () => {
    return new Promise<string>((resolve) => {
      // 准备钉钉环境
      dd.ready(() => {
        // 获取鉴权码
        dd.runtime.permission
          .requestAuthCode({
            corpId: DD_CORP_ID, // 这是金雅福企业ID
          })
          .then((info) => {
            resolve(info.code)
          })
      })
    })
  }

  /** 钉钉获取位置 */
  const ddLocation = async () => {
    // 获取位置信息
    return dd.device.geolocation.get({
      targetAccuracy: 200,
      coordinate: 1,
      withReGeocode: true,
      useCache: true, //默认是true，如果需要频繁获取地理位置，请设置false
      onSuccess: function (result: any) {
        if (`${result?.errorCode}` === '4') {
          // alert('请开启定位权限');
        }

        return result
      },
      onFail: function (err) {
        if (err?.errorCode === '4') {
          alert('请开启定位权限')
        }
      },
    } as any)
  }

  const ddRegister = async () => {
    // if (isReady) return
    // const locationHooks = useLocation()
    // const result = await api.JSAPiConfig(locationHooks.getDomain())
    // dd.config({
    //   ...result?.data,
    //   type: 0, //选填。0表示微应用的jsapi,1表示服务窗的jsapi；不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
    //   jsApiList: ['biz.contact.choose', 'device.geolocation.get'], // 必填，需要使用的jsapi列表，注意：不要带dd。
    // })
    // isReady = true
  }

  return {
    DTFrameLogin,
    ddRegister,
    ddLogin,
    ddLocation,
  }
}
